//package org.vivi.spring3.gateway.config;
//import org.springframework.beans.factory.annotation.Autowired;
//import org.springframework.beans.factory.annotation.Value;
//import org.springframework.cloud.gateway.route.RouteLocator;
//import org.springframework.stereotype.Component;
//import springfox.documentation.swagger.web.SwaggerResource;
//import springfox.documentation.swagger.web.SwaggerResourcesProvider;
//
//import java.util.ArrayList;
//import java.util.HashSet;
//import java.util.List;
//import java.util.Set;
//
//@Component
//public class SwaggerProvider implements SwaggerResourcesProvider {
//    /**
//     * 接口地址
//     */
//    public static final String API_URI = "/v2/api-docs";
//
//    /**
//     * 路由加载器
//     */
//    @Autowired
//    private RouteLocator routeLocator;
//
//    /**
//     * 网关应用名称
//     */
//    @Value("${spring.application.name}")
//    private String applicationName;
//
//    @Override
//    public List<SwaggerResource> get() {
//        //接口资源列表
//        List<SwaggerResource> resources = new ArrayList<>();
//        //服务名称列表
//        List<String> routeHosts = new ArrayList<>();
//        // 获取所有可用的应用名称
//        routeLocator.getRoutes().filter(route -> route.getUri().getHost() != null)
//                .filter(route -> !applicationName.equals(route.getUri().getHost()))
//                .subscribe(route -> routeHosts.add(route.getUri().getHost()));
//        // 去重，多负载服务只添加一次
//        Set<String> existsServer = new HashSet<>();
//        routeHosts.forEach(host -> {
//            // 拼接url
//            String url = "/" + host + API_URI;
//            //不存在则添加
//            if (!existsServer.contains(url)) {
//                existsServer.add(url);
//                SwaggerResource swaggerResource = new SwaggerResource();
//                swaggerResource.setUrl(url);
//                swaggerResource.setName(host);
//                resources.add(swaggerResource);
//            }
//        });
//        return resources;
//    }
//
//}
//
